console.log('==========测试async==========')
async function test() {
    return 1  //如果返回值不是promise对象,会自动包装成promise对象
}

console.log(test());

async function test2() {
    const myError = new Error('自定义错误')
    throw myError //使用async函数抛出的错误,会被Promise.reject(错误)捕获
}

console.log(test2().catch(() => { }));
//promise中的catch方法,可以捕获异步函数中的所有错误以及promise的reject状态
console.log('===========测试await=========')


// 定义一个一秒钟之后返回1且状态为成功的promise
let prmise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(1)
    }, 1000)
})

// 定义一个一秒钟之后返回2且状态为失败的promise
let prmise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject(1)
    }, 1000)
})

//定义一个使用了await的异步函数
async function test3() {
    console.log(prmise1)
    let res = await prmise1  //await会阻塞后面的代码,等待prmise1执行完毕
    console.log(res)
    console.log(prmise1)
}
async function test4() {
    console.log(prmise2)
    let res = await prmise2  //如果是reject状态,则会抛出异常,后续代码不会执行,在test4中用catch捕获
    console.log(res)
    console.log(prmise2)
}


// 在外层想让test3和test4同步执行,可以使用立即执行函数加上async和await
(async function () {
   await test3()
   await test4().catch((data) => {
        console.log(data)
    })
})()